package com.vcredit.creditcat.persistence;
import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.vcredit.creditcat.model.Resource;
import com.vcredit.creditcat.model.Role;

/**
 * 资源DAO
 *
 */
public interface ResourceMapper{
	
	/**
	 * 新增资源
	 * @param obj 资源对象
	 */
	public void insert(Resource obj);
	
	/**
	 * 修改资源
	 * @param obj 资源对象
	 */
	public void update(Resource obj);
	
	/**
	 * 删除资源
	 * @param id 资源Id
	 */
	public void delete(Long id);
	
	/**
	 * 查询所有资源
	 * @return 资源集合
	 */
	public List<Resource> findAll();
	
	/**
	 * 根据匹配查询
	 * @param obj 资源对象
	 * @return 资源集合
	 */
	public List<Resource> find(Resource obj);
	
	/**
	 * 根据Id查询
	 * @param id 资源Id
	 * @return 资源对象
	 */
	public Resource findById(Long id);


	
	/**
	 * 根据上级资源Id查询子资源集合
	 * @param pId 上级资源Id
	 * @return 资源集合
	 */
	public List<Resource> findByPId(Long pId);
	
	/**
	 * 根据上级资源Id查询子资源集合数
	 * @param pId 上级资源Id
	 * @return 子资源集合数
	 */
	public Integer findChildrenCount(Long pId);
	
	/**
	 * 全局资源名唯一性验证
	 * @param id 资源Id
	 * @param name 资源名
	 * @return
	 */
	public Integer vaildName(@Param("id") Long id, @Param("name") String name);
	
	/**
	 * 同一节点下资源名唯一性验证
	 * @param id 资源Id
	 * @param name 资源名
	 * @param pId 父节点Id
	 * @return
	 */
	public Integer vaildNameAtSamePid(@Param("id") Long id, @Param("name") String name, @Param("pId")Long pId);
	
	/**
	 * 根据资源Id查询上级资源Id集合
	 * @param resourceIds
	 * @return
	 */
	public List<Long> findParentResourceIds(@Param("resourceIds") Set<Long> resourceIds);
	
	/**
	 * 根据用户名,资源名称查询该资源下级没有权限的资源点
	 * @param userId
	 * @return
	 */
	public List<Resource> findNoRoleReousrces(@Param("id")Long userId,@Param("url")String url);

	/**
	 * 根据userId查询用户拥有的菜单权限
	 * @param userId
	 * @return
	 */
	List<Resource> findByUserId(@Param("userId")Long userId,@Param("resourceType")int resourceType);
	/**
	 * 查询用户拥有的按钮权限或渠道数据查询权限
	 * @param userId
	 * @return
	 */
	List<String> findPrivilegesByUserId(@Param("userId")Long userId,@Param("resourceType")int resourceType);
	/**
	 * 查询已配置权限的按钮
	 * @param value
	 * @return
	 */
	int findPrivilegesByValue(@Param("value")String value);

	/**
	 * 分类查询所有资源
	 * @param resourceType
	 * @return
	 */
	List<Resource> findResourcesByTypes(@Param("resourceType")Long resourceType);
	
}
